//package com.skplanet.oneplusonewindow.moimserver.web;
//
//import java.util.List;
//
//import javax.servlet.http.HttpServletRequest;
//
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.ModelAttribute;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.multipart.MultipartFile;
//
//import com.skplanet.oneplusonewindow.moimserver.domain.Moim_Board;
//import com.skplanet.oneplusonewindow.moimserver.domain.Moim_Comment;
//import com.skplanet.oneplusonewindow.moimserver.service.BoardService;
//import com.skplanet.oneplusonewindow.moimserver.util.FileWriter;
//
//
//@Controller
//public class BoardController {
//	@Autowired
//	private BoardService boardService;
//	
//	// http://localhost/boardorm/list 
//	// http://localhost/boardorm/list?pg=1
//	// http://localhost/boardorm/list?pg=1
//	// 위와 같은 형식으로 브라우저에서 호출되면 아래의 메소드가 실행된다.
//	// 사용자가 직접 URL값을 입력하여 호출하거나 링크를 클릭하여 호출하는 모든 방법은 GET방식이라고 한다.
//	// ? 이후의 값은 파라미터라고 하는데, 파라미터값을 읽어들이기 위하여 list메소드는 괄호안에 파라미터로
//	// @RequestParam(value="pg", defaultValue="1", required=false)int ipg 를 선언하고 있다.
//	// pg는 반드시 필요한 값이 아니고, 만약 전달이 안되면 기본값으로 문자열 1값을 가진다. 그 이후에 자동으로 int형으로 변환되어
//	// ipg변수에 저장된다.
//	// 두번째 파라미터인 Model model은 해당 메소드가 실행된 후 jsp에게 값을 전달할 목적으로 사용된다.
//	
//	// 메소드 안의 구현을 보면 먼저 ipg에 해당하는 정보를 BoardDAO에서 읽어오고 있다.
//	// 그리고 전체 페이지수 (pageCount), 전체 건수(boardCount) 등의 값을 구한다.
//	
//	// 이렇게 구한 값은 jsp에게 전달하기 위하여 model.addAttribute(키, 값) 메소드를 이용하여 저장된다.
//	// 저장된 정보는 "list"라고 이름 붙은 jsp에게 값을 전달하게 된다.
//	@RequestMapping(value="/list", method = RequestMethod.GET)
//	public String list(
//			@RequestParam(value="pg", defaultValue="1", required=false)int ipg
//			, Model model
//	){
//		List<Moim_Board> list =boardService.getBoardList(ipg);
////		int boardCount = boardService.getBoardCount();
////		int pageCount = boardCount / 5;
////		if(boardCount % 5 > 0)
////			pageCount++;
////		if(pageCount == 0) pageCount = 1; // 자료가 없을 경우 0 page가 나오기 때문에.
////		System.out.println("boardCount :" + boardCount + ", pageCount :" + pageCount);
////		model.addAttribute("list", list);
////		model.addAttribute("ipg", ipg);
////		model.addAttribute("boardCount", boardCount);
////		model.addAttribute("pageCount", pageCount);
//		return "list";
//	} // list 메소드 끝.
//	
//	// http://localhost/boardorm/read?id=1
//	// 위와 같은 형식으로 path가 호출되어야 하며, id파라미터는 반드시 존재해야 한다.
//	// 파라미터로 전달받은 값은 long id에 저장된다.
//	// jsp에게 값을 전달하기 위하여 Model model이 선언되어 있다.
//	
//	// 메소드 안의 구현된 내용을 보면 id에 대항하는 Board정보를 읽어온다.
//	// Board board = boardDAO.findUniqByObject("id", id);
//	// 읽어온 값의 readCount를 1증 가 시킨 후 수정한다.
//	// board.setReadcount(board.getReadcount() + 1);
//	// boardDAO.update(board);
//	
//	// 수정된 board값을 model.addAttribute로 값을 저장하여 jsp에게 전달한다.
//	
//	// "read"라고 이름붙은 jsp에게 값이 전달하여 출력되게 된다.
//	@RequestMapping(value="/read", method = RequestMethod.GET)
//	public String read(
//			@RequestParam(value="id", required=false)long id
//			, Model model
//	){
//		boardService.updateReadCount(id);
//		Moim_Board board = boardService.getBoard(id);
//		model.addAttribute("board", board);
//		return "read";
//	} // list 메소드 끝.	
//	
//	// http://localhost/boardorm/writeform 
//	// 위와 같은 URL로 호출되어야 한다.
//	// 파라미터는 전달받지 않기 때문에 writeform메소드의() 안에는 아무것도 없다.
//	// jsp에도 값을 전달할 필요가 없기 때문에 Model model이 선언되지 않았다.
//	
//	// "writeform"이라고 이름붙은 jsp가 보여지게 된다.
//	@RequestMapping(value="/writeform", method = RequestMethod.GET)
//	public String writeform(){
//		
//		return "writeform";
//	}
//	
//	// http://localhost/boardorm/writeform 으로 부터 값을 전달 받아 저장하는 목적으로 사용된다.
//	// http://localhost/boardorm/write URL로 호출되어야 하는데 form으로 부터 post방식으로만 전달되는 값만 처리된다.
//	// 직접 URL을 호출하는 방식(GET)으로 호출하면 오류가 발생한다.
//	
//	// writeform에서 입력한 여러가지 값을 한꺼번에 받아들이기 위하여 다음과 같이 write메소드에 파라미터를 선언하였다.
//	//  @ModelAttribute Board board  Board의 setContent(..), setName(..), setPasswd(..) 등의 메소드가 자동으로 호출되며,
//	// 폼(form)으로 부터 전달받은 값이 자동으로 설정된다.)
//	
//	// 사용자의 ip주소를 받아들이기 위하여  HttpServletRequest request 를 선언하였다.
//	// 이렇게 저장된 정보를 db에 저장하기 위하여 다음과 같은 코드가 호출되었다.
//	// boardDAO.save(board);
//
//	@RequestMapping(value="/write", method = RequestMethod.POST)
//	public String write(
//			 @ModelAttribute Moim_Board board,
//			 HttpServletRequest request,
//			 MultipartFile file1,
//			 MultipartFile file2
//	){
//		board.setIp(request.getRemoteAddr());
//		FileWriter fw = new FileWriter();
//		if(file1 != null){
//			fw.writeFile(file1, "C:/tmp/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/boardorm/resources/images", file1.getOriginalFilename());
//			board.setRealFilePath1("C:/tmp/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/boardorm/resources/images/" + file1.getOriginalFilename());
//			board.setUrlFilePath1("/boardorm/resources/images/" + file1.getOriginalFilename()); 
//		}
//		if(file2 != null){
//			fw.writeFile(file2, "C:/tmp/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/boardorm/resources/images", file2.getOriginalFilename());
//			board.setRealFilePath2("C:/tmp/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/boardorm/resources/images/" + file2.getOriginalFilename());
//			board.setUrlFilePath2("/boardorm/resources/images/" + file2.getOriginalFilename()); 			
//		}
//		System.out.println(board);
//		boardService.addBoard(board);
//		
//		return "redirect:/list";
//	}	
//	
//	// read와 유사하다.
//	@RequestMapping(value="/updateform", method = RequestMethod.GET)
//	public String updateform(@RequestParam(value="id", required=true)long id
//			, Model model){
//		Moim_Board board = boardService.getBoard(id);
//		model.addAttribute("board", board);
//		return "updateform";
//	}
//	
//	// write와 유사하지만, 다른 점은 사용자가 입력한 암호와 db에 저장된 게시물의 암호를 비교하는
//	// 부분이다. 이를 위하여 db에서 정보를 읽어온다.
//	// 주의할 점은 수정을 위하여 db에서 읽어온 정보를 사용해야 한다는 것이다.
//	// board를 사용하면 오류가 발생한다.
//
//	@RequestMapping(value="/update", method = RequestMethod.POST)
//	public String update(@ModelAttribute Moim_Board board,
//			 HttpServletRequest request){
//		Moim_Board b1 = boardService.getBoard(board.getId());
//		if(b1.getPasswd().equals(board.getPasswd())){
//			boardService.updateBoard(board);
//			return "redirect:/read?id=" + board.getId();
//		}else{
//			return "redirect:/updateform?id=" + board.getId();
//		}
//		
//	}
//	
//	// writeform과 유사하지만 id값을 파라미터로 전달받는다.
//	@RequestMapping(value="/deleteform", method = RequestMethod.GET)
//	public String deleteform(@RequestParam(value="id", required=true)long id
//			, Model model){
//		
//		return "deleteform";
//	}
//	
//	// delete는 update와 유사하다. 다만 삭제를 위하여 boardDAO.delete 메소드가 사용되었다.
//
//	@RequestMapping(value="/delete", method = RequestMethod.POST)
//	public String delete(@RequestParam(value="id", required=true)long id,
//			@RequestParam(value="passwd", required=true)String passwd){
//		Moim_Board board = boardService.getBoard(id);
//		if(passwd.equals(board.getPasswd())){
//			boardService.deleteBoard(board);
//			return "redirect:/list";
//		}else{
//			return "redirect:/deleteform?id=" + board.getId();
//		}
//	}
//
//	
//	@RequestMapping(value="/commentWrite", method = RequestMethod.POST)
//	public String commentWrite(
//			 @RequestParam(value="board_id", required=true)long board_id,
//			 @ModelAttribute Moim_Comment comment,
//			 HttpServletRequest request
//	){
//		boardService.addComment(board_id, comment);
//		return "redirect:/read?id=" + board_id;
//	}	
//		
//}
